// 基础配置可进行单独定义导入
var baseUrl = "https://api.saiyaoyun.com/v2";
var basePayUrl = "https://p.saiyaoyun.com/v1";
var isPayBaseUrl = false;
export default {
  isPayBaseUrl,
  // 请求拦截器 原理：利用微任务.then 让所有使用请求拦截器的函数 在拦截器函数之后执行
  config: {
    // 请求拦截器(给请求统一添加 公共请求头、baserUrl、method)
    beforeRequest(options = {}) {
      return new Promise((resolve, reject) => {
        const url = options.url
        // 添加设置请求url
        const urlList = ['http', 'https']
        if (urlList.some(a => url.includes(a))) {
          options.url = url
        } else {
          if (isPayBaseUrl) {
            options.url = basePayUrl
          } else {
            options.url = baseUrl + options.url
          }
        }

        // 添加请求方式,默认为GET
        options.method = options.method || 'GET'

        // 发起请求前执行的业务逻辑
        //.....................
        //..................
        // 设置公共请求头
        if (!options.header) {
          // 设置公共请求头
          const userInfo = uni.getStorageSync("USER_INFO")
          // console.log("头信息:",userInfo)
          options.header = {
            'Authorization': `JWT ${userInfo.access_token}`
          }
        }
        // console.log("请求前设置信息:", options)
        resolve(options)
      })
    },
    // 响应拦截器 (接收参数请求后得到的数据，处理非成功数据reject，并将数据剥离返回resolve)
    responseRequest(data) {
      return new Promise((resolve, reject) => {
        // 隐藏加载框
        uni.hideLoading()
        const {
          errMsg
        } = data

        // 请求失败
        if (errMsg !== 'request:ok') {
          return reject(errMsg)
        }
        // 请求成功响应处理逻辑
        //................
        //...............
        return resolve(data)
      })
    }
  },
  // 发起请求
  request(options) {
    console.log("请求信息:", options)
    return this.config.beforeRequest(options).then(opt => {
      return uni.request(opt)
    }).then(this.config.responseRequest)
  },
  // get请求
  get(url, params = null, options = {}) {
    options.url = url
    options.url += params ? ('?' + Object.keys(params).map(key => key + '=' + params[key]).join('&')) : ''
    options.method = 'GET'
    return this.request(options)
  },
  // post请求
  post(url, data = null, options = {}) {
    options.url = url
    options.data = data
    options.method = 'POST'

    return this.request(options)
  },

  // post请求
  delete(url, data = null, options = {}) {
    options.url = url
    options.data = data
    options.method = 'DELETE'
    return this.request(options)
  },

  // put
  put(url, data = null, options = {}) {
    options.url = url
    options.data = data
    options.method = 'PUT'
    return this.request(options)
  }
}